package com.shujia.scala

object Demo16Fun3 {
  def main(args: Array[String]): Unit = {

    /**
      * 以函数作为返回值
      *
      */


    def fun1(str: String): String => Int = {


      def f(s: String): Int = {
        (s + str).toInt
      }

      //返回一个函数
      f
    }

    //调用fun1 返回一个函数

    val f2: String => Int = fun1("123213")

    //调用返回的函数
    val i: Int = f2("222")


    println(i)


    //简化调用过程
    val j: Int = fun1("111")("222")


    def fun3(str: String, s: String): Int = {
      (s + str).toInt
    }

    val k: Int = fun3("333", "444")

    /**
      * 简写
      *
      * 函数柯里化
      *
      */

    def fun2(str: String)(s: String): Int = {
      (s + str).toInt
    }

    val i2: Int = fun2("555")("6666")
    println(i2)

    /**
      * 可以先传第一个函数在传后面的函数
      *
      */
    val f4: String => Int = fun2("777")

    val i4: Int = f4("888")
    val i5: Int = f4("999")


  }

}
